Cryptography techniques work by encrypting data using a secret key before storing them. With the massive increase in the generation of data (also known as big data) in the last few years, coupled with the advent of smaller computers (with less memory), commonly referred under the umbrella of Internet-of-Things (IoT) devices, the process of storing and accessing sensitive business data from third party cloud vendors (also other cloud vendors used only for storing personal data) has become common. The amount of sensitive data stored in the cloud has increased many fold and the security and privacy of this data has arisen as the point of utmost priority and importance with both the customers storing their data on the cloud, and the cloud vendor taking the responsibility of storing the customer's data.
Even though customer's data is stored securely, the access or filtering of the data based on a request reveals the content of the data. One solution is to transfer the entire set of requested data to the client in encrypted form and allow the client to use the decryption key and access the data. However, devices accessing cloud-based data are becoming smaller and smaller, and with less memory, and there are many situations where the requested data cannot be transferred to the client's computer/device for further processing. In addition, complex data processing is generally preferred on more powerful computer systems, rather than the small computers (e.g., mobile phones, etc.) to access or visualize the results. In such a scenario the data needs to be processed in the cloud, however, access of such data in the cloud reveals patterns through which the cloud provider or a hacker on the cloud can understand, and opens an opportunity for misuse of the contents of the data so revealed.